package cc.rengu.oltp.service.common.dao;

import cc.rengu.oltp.service.common.entity.UserOrderInfo;
import cc.rengu.oltp.utility.bean.PageInfo;
import cc.rengu.oltp.utility.bean.PageResult;

import java.util.List;

/**
 * 用户订单表操作接口
 * Created by 王成 on 2020/2/6
 */
public interface UserOrderInfoMapper {
    /**
     * 登记用户订单信息
     *
     * @param userOrderInfo 用户订单信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int insertUserOrderInfo(UserOrderInfo userOrderInfo) throws Exception;

    /**
     * 根据主键更新用户订单信息
     *
     * @param userOrderInfo 用户订单信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int updateUserOrderInfoByPrimaryKey(UserOrderInfo userOrderInfo) throws Exception;

    /**
     * 根据用户订单号更新用户订单信息
     *
     * @param userOrderInfo 用户订单信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int updateUserOrderInfoByUserOrderId(UserOrderInfo userOrderInfo) throws Exception;

    /**
     * 根据用户订单号查询用户订单信息
     *
     * @param instId      多法人标识
     * @param userOrderId 用户订单号
     * @return 用户订单信息
     * @throws Exception 异常
     */
    UserOrderInfo selectUserOrderInfoByUserOrderId(String instId, String userOrderId) throws Exception;

    /**
     * 根据商户订单号查询用户订单信息
     *
     * @param instId         多法人标识
     * @param mchntOrderId   商户订单号
     * @param msgSrcId       源系统标识
     * @param transChannelId 渠道标识
     * @return 用户订单信息
     * @throws Exception 异常
     */
    UserOrderInfo selectUserOrderInfoByMchntOrderId(String instId, String mchntOrderId, String msgSrcId, String transChannelId) throws Exception;

    /**
     * 根据前端流水号查询用户订单信息
     *
     * @param instId         多法人标识
     * @param frontSeqNum    前端流水号
     * @param msgSrcId       源系统标识
     * @param transChannelId 渠道标识
     * @return 用户订单信息
     * @throws Exception 异常
     */
    UserOrderInfo selectUserOrderInfoByFrontSeqNum(String instId, String frontSeqNum, String msgSrcId, String transChannelId) throws Exception;

    /**
     * 根据主键查询用户订单信息
     *
     * @param instId    多法人标识
     * @param sysSeqNum 系统流水号
     * @return 用户订单信息
     * @throws Exception 异常
     */
    UserOrderInfo selectUserOrderInfoByPrimaryKey(String instId, String sysSeqNum) throws Exception;

    /**
     * 根据订单URL查询用户信息信息
     *
     * @param instId   多法人标识
     * @param orderUrl 订单URL
     * @return 用户订单信息
     * @throws Exception 异常
     */
    UserOrderInfo selectUserOrderInfoByOrderUrl(String instId, String orderUrl) throws Exception;

    /**
     * 根据原交易流水号查询用户订单信息
     *
     * @param instId        多法人标识
     * @param origSysSeqNum 原交易流水号
     * @return 用户订单信息
     * @throws Exception 异常
     */
    List<UserOrderInfo> selectUserOrderInfoByOrigSysSeqNum(String instId, String origSysSeqNum) throws Exception;

    /**
     * 根据用户标识查询用户订单信息
     *
     * @param instId    多法人标识
     * @param userId    用户标识
     * @param beginDate 查询开始日期
     * @param endDate   查询截止日期
     * @param pageInfo  分页信息
     * @return 用户订单信息
     * @throws Exception 异常
     */
    PageResult selectUserOrderInfoByUserId(String instId, String userId, String beginDate, String endDate, PageInfo pageInfo) throws Exception;
}
